--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / backend / app_security_settings.py
Displaying Raw • Download
meshchatx/src/backend/app_security_settings.py fa46dc4ce9ab50cbe66a7a9e4b3bca0140102345 (fa46dc4c) Text, 2.60 KB
T8b949e# SPDX-License-Identifier: 0BSD
T8b949e"""App-wide security settings persisted under the storage directory."""
Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations
Tff7b72import T7ee787json
Tff7b72import T7ee787os
Tff7b72import T7ee787threading
Tff7b72from T7ee787typing Tff7b72import Te6edf3Any
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787ip_allowlist Tff7b72import Te6edf3normalize_allowlist_text
Te6edf3_SETTINGS_FILENAME Tff7b72= Ta5d6ff"Ta5d6ffapp_security.jsonTa5d6ff"
Te6edf3_LOCK Tff7b72= Te6edf3threadingTff7b72.Td2a8ffRLockTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_settings_pathTb4b4b4(Te6edf3storage_dirTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72return Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3storage_dirTb4b4b4, Te6edf3_SETTINGS_FILENAMETb4b4b4)
Tff7b72def Td2a8ff_default_settingsTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffweb_ui_ip_allowlistTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftrusted_proxy_cidrsTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff"Tb4b4b4,
Tb4b4b4}
Tff7b72def Td2a8ffload_app_security_settingsTb4b4b4(Te6edf3storage_dirTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Te6edf3path Tff7b72= Te6edf3_settings_pathTb4b4b4(Te6edf3storage_dirTb4b4b4)
Tff7b72with Te6edf3_LOCKTb4b4b4:
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3pathTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3_default_settingsTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3data Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadTb4b4b4(Te6edf3fTb4b4b4)
Tff7b72except Tb4b4b4(Tf85149OSErrorTb4b4b4, Te6edf3jsonTff7b72.Td2a8ffJSONDecodeErrorTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3_default_settingsTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3dataTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3_default_settingsTb4b4b4(Tb4b4b4)
Te6edf3merged Tff7b72= Te6edf3_default_settingsTb4b4b4(Tb4b4b4)
Te6edf3mergedTff7b72.Td2a8ffupdateTb4b4b4(Te6edf3dataTb4b4b4)
Tff7b72return Te6edf3merged
Tff7b72def Td2a8ffsave_app_security_settingsTb4b4b4(
Te6edf3storage_dirTb4b4b4: Tffa657strTb4b4b4,
Te6edf3updatesTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787ip_allowlist Tff7b72import Te6edf3parse_allowlist_networks
Te6edf3current Tff7b72= Te6edf3load_app_security_settingsTb4b4b4(Te6edf3storage_dirTb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffweb_ui_ip_allowlistTa5d6ff" Tff7b72in Te6edf3updatesTb4b4b4:
Te6edf3text Tff7b72= Te6edf3normalize_allowlist_textTb4b4b4(Te6edf3updatesTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffweb_ui_ip_allowlistTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3textTb4b4b4:
Te6edf3parse_allowlist_networksTb4b4b4(Te6edf3textTb4b4b4)
Te6edf3currentTb4b4b4[Ta5d6ff"Ta5d6ffweb_ui_ip_allowlistTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3text
Tff7b72if Ta5d6ff"Ta5d6fftrusted_proxy_cidrsTa5d6ff" Tff7b72in Te6edf3updatesTb4b4b4:
Te6edf3text Tff7b72= Te6edf3normalize_allowlist_textTb4b4b4(Te6edf3updatesTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftrusted_proxy_cidrsTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3textTb4b4b4:
Te6edf3parse_allowlist_networksTb4b4b4(Te6edf3textTb4b4b4)
Te6edf3currentTb4b4b4[Ta5d6ff"Ta5d6fftrusted_proxy_cidrsTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3text
Te6edf3path Tff7b72= Te6edf3_settings_pathTb4b4b4(Te6edf3storage_dirTb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffdirnameTb4b4b4(Te6edf3pathTb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff.Ta5d6ff"Tb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72with Te6edf3_LOCKTb4b4b4, Tffa657openTb4b4b4(Te6edf3pathTb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3jsonTff7b72.Td2a8ffdumpTb4b4b4(Te6edf3currentTb4b4b4, Te6edf3fTb4b4b4, Te6edf3indentTff7b72=T79c0ff2Tb4b4b4)
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4)
Tff7b72return Te6edf3current
Tff7b72def Td2a8ffget_web_ui_ip_allowlistTb4b4b4(Te6edf3storage_dirTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72return Te6edf3normalize_allowlist_textTb4b4b4(
Te6edf3load_app_security_settingsTb4b4b4(Te6edf3storage_dirTb4b4b4)Tff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffweb_ui_ip_allowlistTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8ffget_trusted_proxy_cidrsTb4b4b4(Te6edf3storage_dirTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
T8b949e"""CIDRs allowed to supply X-Forwarded-For (env overrides file settings)."""
Te6edf3env Tff7b72= Te6edf3normalize_allowlist_textTb4b4b4(Te6edf3osTff7b72.Td2a8ffenvironTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffMESHCHAT_TRUSTED_PROXIESTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3envTb4b4b4:
Tff7b72return Te6edf3env
Tff7b72return Te6edf3normalize_allowlist_textTb4b4b4(
Te6edf3load_app_security_settingsTb4b4b4(Te6edf3storage_dirTb4b4b4)Tff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftrusted_proxy_cidrsTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────